#include "Math.h"

#include <cmath>

namespace Rz { namespace Math {

f32 DegToRad(f32 deg)
{
	return deg * (static_cast<f32>(Pi) / 180.0f);
}

f32 RadToDeg(f32 rad)
{
	return rad * (180.0f / static_cast<f32>(Pi));
}

//////////////////////////////////////////////////////////////////////////
// f32
f32 Sin(f32 x)
{
	return sin(x);
}

f32 Cos(f32 x)
{
	return cos(x);
}

f32 Tan(f32 x)
{
	return tan(x);
}

f32 Cotg(f32 x)
{
	return 1.0f/Tan(x);
}

f32 Sqrt(f32 x)
{
	return sqrt(x);
}

f32 Exp(f32 x)
{
	return exp(x);
}

f32 Log2(f32 x)
{
	return log(x);
}

f32 Pow(f32 x, f32 y)
{
	return pow(x, y);
}

s32 IFloor(f32 x)
{
	return (s32)x;
}

//////////////////////////////////////////////////////////////////////////
// f64
f64 Sin(f64 x)
{
	return sin(x);
}

f64 Cos(f64 x)
{
	return cos(x);
}

f64 Tan(f64 x)
{
	return tan(x);
}

f64 Cotg(f64 x)
{
	return 1.0f/Tan(x);
}

f64 Sqrt(f64 x)
{
	return sqrt(x);
}

f64 Exp(f64 x)
{
	return exp(x);
}

f64 Log2(f64 x)
{
	return log(x);
}

f64 Pow(f64 x, f64 y)
{
	return pow(x, y);
}

s64 IFloor(f64 x)
{
	return (s64)x;
}

//////////////////////////////////////////////////////////////////////////
// random
f32 Random(u32* seed)
{
	f32 res;

	*seed *= 16807;

	*((u32*)&res) = ( ((u32)(*seed)) >> 9 ) | 0x40000000u;

	return (res - 3.0f);
}

} }
